#include <hic.h>
#include "main.h"
#include "gpio.h"
#include "time1.h"
#include "uart1.h"
#include "myinit.h"
/********************�û�RAMȫ���������********************
�� �� ����  Ram_Clr                       
����������  �û�RAMȫ������                           
���������  ��                                          
��������ֵ����                                           
***********************************************************/
void Ram_Clr(void) 
{
	__asm 
  { 
	CLR   IAAL;
	CLR   IAAH;
	CLR   IAD;
	INC   IAAL,1;
	JBS   PSW,C
	GOTO  $-3;
	INC   IAAH,1;
	JBS   IAAH,4
	GOTO  $-6;
  } 
}

/**********************************************************************************
*�� �� ����Sys_Initial()                                    	
*����������ϵͳʱ������Ϊ13M       
*���������  ��                                           
*��������ֵ����                               
**********************************************************************************/
void Sys_Initial()                               
{                                
     OSCP = 0x55;                               
     OSCC = 0xE0;                               
     ANS = 0xFF;                                
     
     
}
/********************�뿴�Ź�********************/
void Clear_Wdt(void)
{
    __Asm  CWDT;
}

/**********************������ʱ����************************
�� �� ����  Delay_Ms                       
����������  ������ʱ                           
���������  x����                                          
��������ֵ����        
����	1	function 'putMsg_tx' can not be found.		1	1	UART
                                   
***********************************************************/
void Delay_Ms(UINT16 ms) 
{
	UINT16 i,j;
	for(i=0;i<ms;i++)
	{
	   for(j=0;j<540;j++)
	   {
	      ;
	   }
	   Clear_Wdt();
	}
}

void WdtInit(void)
{

}
UINT16 read_ip=0;
UINT16 d1=0;
UINT08 q;
void main() 
{
	
	
	
    Ram_Clr();      
	OSCP = 0x55;                               
	OSCC = 0XEF;    
	ANS = 0xFF;                                
	__Asm  CWDT;

	Read_Address_IO();
	Read_addr_code();

	Channe_driver();
	Input_channe();
	queuehead = 0;
	queuetail = 0;
	queuehead_tx=0;
	queuetail_tx=0;
    __Asm  CWDT;
	CH1_8=0xFF;
	CH9_16=0xFF;
	CH17_24=0xFF;
	CH25_30=0x3F;
	
	Out_RS485EN();//ʹ��RS485
	Uart_Init();
	
	__Asm  CWDT;
	while(1)
	{
		  read_ip++;
		  
		  __Asm  CWDT;
          if(read_ip>=2000)
          {
            Read_addr_code();
            read_ip=0;
          }

		 if(time_st>0)
          {
			__Asm  CWDT;
            if(testQueue())
            {
			  __Asm  CWDT;
              for(d1=0;d1<10;d1++)
                {  
                 MYUSART_2[d1] = getMsg();
                }
              if(MYUSART_2[3]==Plate_address1)
                {
                  USRT_TXDATA=0x00;
                  tim3_tim=0;
                  
                  CRC_lens=0;
                  CRC_lens=MYUSART_2[2];
                  CRC_lens=CRC_lens+3;
                  Crc8_load=0x00;
                  Crc8_load=crc8_chack(MYUSART_2, CRC_lens);
				  __Asm  CWDT;
                  if(Crc8_load==MYUSART_2[CRC_lens])
                  {
                    RS485_Data_parsing(); 
                    time_st--;
                  }
                }
              for(d1=0;d1<8;d1++)
                {
                  MYUSART_2[d1]=0x00;
                }              
            }
            if(time_st==0)
            {
             USRT_TXDATA=0xFF;
            }
          }
         
         
         
           if(USRT_TXDATA != 0x00)
             {
				Uart_Flag=0X00;	
				__Asm  CWDT;
               if(Is_interrupted != 0xff)
               {
				PF5 = 1;//ʹ��RS485����
				Delay_Ms(3);
               }
			   __Asm  CWDT;
			   TX1EN = 1;          
			   TX1IE = 1;          
			   GIE = 1;            //ʹ������δ���ε��ж�
			   USRT_TXDATA=0x00;
             }          
          
		if(Uart_Flag==0XFF)
		{
			__Asm  CWDT;
			Uart_Flag=0X00;		
			Delay_Ms(5);
			PF5=0;	
			RX1EN = 1;          
			RX1IE = 1;          
			GIE = 1;            //ʹ������δ���ε��ж�		
		}
        
         if(qita_cmd==0xff)
          {
                CRC_lens=0;
                CRC_lens=MYUSART_2[2];
                CRC_lens=CRC_lens+3;
                Crc8_load=0x00;
                Crc8_load=crc8_chack(MYUSART_2, CRC_lens);
				__Asm  CWDT;
                if(Crc8_load==MYUSART_2[CRC_lens])
                {
                  RS485_Data_parsing();              
                }    
				__Asm  CWDT;
                for(d1=0;d1<RS485_RX_LEN;d1++)
                {   
                  MYUSART_2[d1]=0x00;
                }
            qita_cmd=0x00;
          }
	}
}

static UINT08 tim3_asd=0;
void To_deal_with_tim1()
{
	__Asm  CWDT;
	if(Plate_address1==0)
	{
	tim3_asd=5;
	}
	else if(Plate_address1==1)
	{
	tim3_asd=7;
	}
	else if(Plate_address1==2)
	{
	tim3_asd=9;
	}
	else if(Plate_address1==3)
	{
	tim3_asd=11;
	}
	else if(Plate_address1==4)
	{
	tim3_asd=13;
	}
	else if(Plate_address1==5)
	{
	tim3_asd=17;
	}
	else if(Plate_address1==6)
	{
	tim3_asd=19;
	}
	else if(Plate_address1==7)
	{
	tim3_asd=21;
	}
	else if(Plate_address1==8)
	{
	tim3_asd=23;
	}
	
	tim3_tim++;
	if(tim3_tim>=tim3_asd)
	{
	time_ov3=0xff;
	}
}
/*******************�жϳ������********************************
�� �� ����Interrupt                                            *
�����������жϳ������,ע�⣺����RISC�ܹ���������֧�ֵݹ����     *
		    ����main���õĺ��������Ա��жϵ���                  *
���������  ��                                                 *
��������ֵ����                                                 *
***************************************************************/
void  Interrupt(void) interrupt
{	 
	/*
	if(T16G1IF && T16G1IE)
     {
         T16G1IF = 0;                             	
         T16G1CS0 = 0;                            	
	     T16G1CS1 = 0; 
         T16G1L += 0xFF;
         T16G1H += 0xAF;
		 To_deal_with_tim1();
         
         T16G1CS0 = 1;                            	
	     T16G1CS1 = 0; 
     }
	 */

    if((RX1IF)&&(RX1IE))      
    {
        Uart1_Recv();         
    }

    if((TX1IF)&&(TX1IE))      
    {
        Uart1_Tx();           
    }
    
}
